package org.fisco.bcos.sdk.demo.contract.dgms;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder;
import org.fisco.bcos.sdk.v3.codec.datatypes.Address;
import org.fisco.bcos.sdk.v3.codec.datatypes.Bool;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes;
import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class OneToOne extends Contract {
    public static final String[] BINARY_ARRAY = {
        "60806040526040805190810160405280600881526020017f4f6e65546f4f6e6500000000000000000000000000000000000000000000000081525060089080519060200190620000519291906200048c565b5073ffffffffffffffffffffffffffffffffffffffff600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b457600080fd5b5060405160408062002ba583398101806040528101908080519060200190929190805190602001909291905050508180620000fe3262000235640100000000026401000000009004565b32600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000600260146101000a81548160ff02191690831515021790555050600081118015620001b15750638000000081105b151562000226576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f30373a20496e76616c696420746f74616c41737365747300000000000000000081525060200191505060405180910390fd5b8060068190555050506200053b565b620002598160006200029f64010000000002620023d0179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c260405160405180910390a250565b620002ba82826200038e640100000000026401000000009004565b15151562000330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f31373a206163636f756e7420616c72656164792068617320726f6c650000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31393a206163636f756e7420697320746865207a65726f20616464726573730081525060200191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004cf57805160ff191683800117855562000500565b8280016001018555821562000500579182015b82811115620004ff578251825591602001919060010190620004e2565b5b5090506200050f919062000513565b5090565b6200053891905b80821115620005345760008160009055506001016200051a565b5090565b90565b61265a806200054b6000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303dfd47c146101015780631f4f519c146101745780631f6320d3146101b557806320694db01461028e57806347bc7093146102d157806350c00197146103145780636352211e146103875780636e07302b146103f4578063702efdf31461041f57806378b38f361461044e578063877b9a67146104f457806389d850131461054f5780639e90f9aa1461057a578063cb2ef6f7146105d1578063d0e7d61114610661578063d7fb71c914610714578063e6400bbe1461072b578063f5cb17fa14610742575b600080fd5b34801561010d57600080fd5b5061017260048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610799565b005b34801561018057600080fd5b5061019f60048036038101908080359060200190929190505050610c6d565b6040518082815260200191505060405180910390f35b3480156101c157600080fd5b5061028c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610e45565b005b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061121f565b005b3480156102dd57600080fd5b50610312600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061136e565b005b34801561032057600080fd5b5061038560048036038101908080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506114bd565b005b34801561039357600080fd5b506103b26004803603810190808035906020019092919050505061158c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040057600080fd5b50610409611673565b6040518082815260200191505060405180910390f35b34801561042b57600080fd5b5061043461167d565b604051808215151515815260200191505060405180910390f35b34801561045a57600080fd5b5061047960048036038101908080359060200190929190505050611694565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104b957808201518184015260208101905061049e565b50505050905090810190601f1680156104e65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050057600080fd5b50610535600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611749565b604051808215151515815260200191505060405180910390f35b34801561055b57600080fd5b50610564611766565b6040518082815260200191505060405180910390f35b34801561058657600080fd5b5061058f611770565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dd57600080fd5b506105e6611796565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561062657808201518184015260208101905061060b565b50505050905090810190601f1680156106535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561066d57600080fd5b50610712600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611834565b005b34801561072057600080fd5b50610729611cd5565b005b34801561073757600080fd5b50610740611f1c565b005b34801561074e57600080fd5b50610783600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612164565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108445750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156108de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b6108e7836121ad565b151561095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31313a206173736574496420646f6573206e6f742068617665206f776e65720081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f32303a206173736574496420686173206265656e2064657374726f796564000081525060200191505060405180910390fd5b6003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660036000858152",
        "60200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600760008282540392505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b86866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c2d578082015181840152602081019050610c12565b50505050905090810190601f168015610c5a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050565b6000610c7833611749565b1515610d12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f30333a2063616c6c657220646f6573206e6f742068617665207468652069737381526020017f756572207065726d697373696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b6006548210151515610db2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f31343a206e657720746f74616c417373657473206d757374206e6f742062652081526020017f6c657373207468616e206265666f72650000000000000000000000000000000081525060400191505060405180910390fd5b600082118015610dc55750638000000082105b1515610e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f30373a20496e76616c696420746f74616c41737365747300000000000000000081525060200191505060405180910390fd5b81600681905550919050565b610e4e33611749565b1515610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f30333a2063616c6c657220646f6573206e6f742068617665207468652069737381526020017f756572207065726d697373696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b6006548311151515610f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f30383a20617373657449642065786365656420746f74616c417373657473000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f30393a20697373756520746f20746865207a65726f206164647265737300000081525060200191505060405180910390fd5b611010836121ad565b151515611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f31303a206173736574496420616c72656164792069737375656400000000000081525060200191505060405180910390fd5b836003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005600085815260200190815260200160002090805190602001906110fe929190612589565b5060016007600082825401925050819055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff167fe27ce25058d1e88f777ec4e0733304e9f1d0168f3974622dc9dacbdf039f310284836040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111de5780820151818401526020810190506111c3565b50505050905090810190601f16801561120b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c85750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b61136b8161221f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114175750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156114b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b6114ba81612279565b50565b6114c633611749565b1515611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f30333a2063616c6c657220646f6573206e6f742068617665207468652069737381526020017f756572207065726d697373696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b80600560008481526020019081526020016000209080519060200190611587929190612589565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31313a206173736574496420646f6573206e6f742068617665206f776e65720081525060200191505060405180910390fd5b80915050919050565b6000600654905090565b6000600260149054906101000a900460ff16905090565b6060600560008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561173d5780601f106117125761010080835404028352916020019161173d565b820191906000526020600020905b81548152906001019060200180831161172057829003601f168201915b50505050509050919050565b600061175f8260006122d390919063ffffffff16565b9050919050565b6000600754905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561182c5780601f106118015761010080835404028352916020019161182c565b820191906000526020600020905b81548152906001019060200180831161180f57829003601f168201915b505050505081565b600260149054906101000a900460ff161515156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f30353a20636f6e74726163742069732073757370656e6465640000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166118d98361158c565b73ffffffffffffffffffffffffffffffffffffffff1614151561198a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f31323a2073656e64657220646f6573206e6f74206f776e20746865206173736581526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515611a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f31323a2073656e64657220646f6573206e6f74206f776e20746865206173736581526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180",
        "806020018281038252601c8152602001807f31333a2073656e6420746f20746865207a65726f20616464726573730000000081525060200191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b85856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c94578082015181840152602081019050611c79565b50505050905090810190601f168015611cc15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d7e5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b600260149054906101000a900460ff161515611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f30363a20636f6e7472616374206973206e6f742073757370656e64656400000081525060200191505060405180910390fd5b6000600260146101000a81548160ff0219169083151502179055507f349b4285cb8dde314c53fd9d8e8e578381a7375e4f76f9dd9fe07f9960f120a433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611fc55750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b600260149054906101000a900460ff161515156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f30353a20636f6e74726163742069732073757370656e6465640000000000000081525060200191505060405180910390fd5b6001600260146101000a81548160ff0219169083151502179055507f6f123d3d54c84a7960a573b31c221dcd86e13fd849c5adb0c6ca851468cc1ae433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6122338160006123d090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c260405160405180910390a250565b61228d8160006124ad90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167faf66545c919a3be306ee446d8f42a9558b5b022620df880517bc9593ec0f2d5260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31393a206163636f756e7420697320746865207a65726f20616464726573730081525060200191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123da82826122d3565b15151561244f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f31373a206163636f756e7420616c72656164792068617320726f6c650000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6124b782826122d3565b151561252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f31383a206163636f756e7420646f6573206e6f74206861766520726f6c65000081525060200191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106125ca57805160ff19168380011785556125f8565b828001600101855582156125f8579182015b828111156125f75782518255916020019190600101906125dc565b5b5090506126059190612609565b5090565b61262b91905b8082111561262757600081600090555060010161260f565b5090565b905600a165627a7a72305820d128450b5233b50de50f30f98d03ba410aa8dc5ccf0c4db4d04d30a3dee254fd0029"
    };

    public static final String BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {
        "60806040526040805190810160405280600881526020017f4f6e65546f4f6e6500000000000000000000000000000000000000000000000081525060089080519060200190620000519291906200048c565b5073ffffffffffffffffffffffffffffffffffffffff600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b457600080fd5b5060405160408062002ba583398101806040528101908080519060200190929190805190602001909291905050508180620000fe3262000235640100000000026401000000009004565b32600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000600260146101000a81548160ff02191690831515021790555050600081118015620001b15750638000000081105b151562000226576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f30373a20496e76616c696420746f74616c41737365747300000000000000000081525060200191505060405180910390fd5b8060068190555050506200053b565b620002598160006200029f64010000000002620023d0179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167fd766f4a67950d691b1432c913f7a137a6566c6434f39026cc104656f3de99cdb60405160405180910390a250565b620002ba82826200038e640100000000026401000000009004565b15151562000330576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f31373a206163636f756e7420616c72656164792068617320726f6c650000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000435576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31393a206163636f756e7420697320746865207a65726f20616464726573730081525060200191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004cf57805160ff191683800117855562000500565b8280016001018555821562000500579182015b82811115620004ff578251825591602001919060010190620004e2565b5b5090506200050f919062000513565b5090565b6200053891905b80821115620005345760008160009055506001016200051a565b5090565b90565b61265a806200054b6000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302afb2861461010157806307ba60f41461015c5780630df9ce93146101ec5780631756244b146102c55780632392c068146102f057806339539073146103335780634db9df361461038a5780634e2b3953146103a157806353fa95e9146103f85780635549e5a6146104395780635711734b146104ac5780636b14f0a414610519578063799013bc146105305780637a4d35471461055f57806380b30b3f146105a25780638ad7f54014610655578063aefc758a146106c8578063d130b9cd146106f3575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610799565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b506101716107b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101b1578082015181840152602081019050610196565b50505050905090810190601f1680156101de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101f857600080fd5b506102c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610854565b005b3480156102d157600080fd5b506102da610c2e565b6040518082815260200191505060405180910390f35b3480156102fc57600080fd5b50610331600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c38565b005b34801561033f57600080fd5b50610348610d87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039657600080fd5b5061039f610dad565b005b3480156103ad57600080fd5b506103e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ff4565b6040518082815260200191505060405180910390f35b34801561040457600080fd5b506104236004803603810190808035906020019092919050505061103d565b6040518082815260200191505060405180910390f35b34801561044557600080fd5b506104aa60048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611215565b005b3480156104b857600080fd5b506104d7600480360381019080803590602001909291905050506112e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e6113cb565b005b34801561053c57600080fd5b50610545611613565b604051808215151515815260200191505060405180910390f35b34801561056b57600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061162a565b005b3480156105ae57600080fd5b50610653600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611779565b005b34801561066157600080fd5b506106c660048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611c1a565b005b3480156106d457600080fd5b506106dd6120ee565b6040518082815260200191505060405180910390f35b3480156106ff57600080fd5b5061071e600480360381019080803590602001909291905050506120f8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075e578082015181840152602081019050610743565b50505050905090810190601f16801561078b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60006107af8260006121ad90919063ffffffff16565b9050919050565b60088054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b505050505081565b61085d33610799565b15156108f7576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f30333a2063616c6c657220646f6573206e6f742068617665207468652069737381526020017f756572207065726d697373696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b6006548311151515610971576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f30383a20617373657449642065786365656420746f74616c417373657473000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610a16576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f30393a20697373756520746f20746865207a65726f206164647265737300000081525060200191505060405180910390fd5b610a1f836122aa565b151515610a94576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f31303a206173736574496420616c72656164792069737375656400000000000081525060200191505060405180910390fd5b836003600085815260200190815260200160002060006101000a81548173ffff",
        "ffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560008581526020019081526020016000209080519060200190610b0d929190612589565b5060016007600082825401925050819055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff167f645797d9fab0efc08a8c8e1b1a514147c9d6656868dbb2fd8c9a608aded76d3084836040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bed578082015181840152602081019050610bd2565b50505050905090810190601f168015610c1a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250505050565b6000600654905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ce15750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610d7b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b610d848161231c565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e565750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610ef0576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b600260149054906101000a900460ff161515610f74576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f30363a20636f6e7472616374206973206e6f742073757370656e64656400000081525060200191505060405180910390fd5b6000600260146101000a81548160ff0219169083151502179055507f49cf6bd0eac7c3496174468c250e85009598e5c78d9a83e07df711d9da5c185a33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061104833610799565b15156110e2576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f30333a2063616c6c657220646f6573206e6f742068617665207468652069737381526020017f756572207065726d697373696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b6006548210151515611182576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f31343a206e657720746f74616c417373657473206d757374206e6f742062652081526020017f6c657373207468616e206265666f72650000000000000000000000000000000081525060400191505060405180910390fd5b6000821180156111955750638000000082105b1515611209576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f30373a20496e76616c696420746f74616c41737365747300000000000000000081525060200191505060405180910390fd5b81600681905550919050565b61121e33610799565b15156112b8576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f30333a2063616c6c657220646f6573206e6f742068617665207468652069737381526020017f756572207065726d697373696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b806005600084815260200190815260200160002090805190602001906112df929190612589565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156113c2576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31313a206173736574496420646f6573206e6f742068617665206f776e65720081525060200191505060405180910390fd5b80915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114745750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561150e576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b600260149054906101000a900460ff16151515611593576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f30353a20636f6e74726163742069732073757370656e6465640000000000000081525060200191505060405180910390fd5b6001600260146101000a81548160ff0219169083151502179055507f8773c8f57dc13d3ee6a296fb66e009fe3abc25fce48e4bdeb7583b3064ad35e833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600260149054906101000a900460ff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116d35750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561176d576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b61177681612376565b50565b600260149054906101000a900460ff161515156117fe576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f30353a20636f6e74726163742069732073757370656e6465640000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1661181e836112e4565b73ffffffffffffffffffffffffffffffffffffffff161415156118cf576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f31323a2073656e64657220646f6573206e6f74206f776e20746865206173736581526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515611998576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f31323a2073656e64657220646f6573206e6f74206f776e20746865206173736581526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a3d576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f31333a2073656e6420746f20746865207a65726f20616464726573730000000081525060200191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff",
        "ffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d6485856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611bd9578082015181840152602081019050611bbe565b50505050905090810190601f168015611c065780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cc55750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611d5f576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f30343a2063616c6c657220646f6573206e6f742068617665207468652073757081526020017f6572207065726d697373696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b611d68836122aa565b1515611ddc576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31313a206173736574496420646f6573206e6f742068617665206f776e65720081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611ed5576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f32303a206173736574496420686173206265656e2064657374726f796564000081525060200191505060405180910390fd5b6003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600760008282540392505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d6486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120ae578082015181840152602081019050612093565b50505050905090810190601f1680156120db5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050565b6000600754905090565b6060600560008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121a15780601f10612176576101008083540402835291602001916121a1565b820191906000526020600020905b81548152906001019060200180831161218457829003601f168201915b50505050509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612253576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f31393a206163636f756e7420697320746865207a65726f20616464726573730081525060200191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6123308160006123d090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fd766f4a67950d691b1432c913f7a137a6566c6434f39026cc104656f3de99cdb60405160405180910390a250565b61238a8160006124ad90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f36b34ae98169cd7ef0173d334314715146307b58e670074b7fcb08536203e19760405160405180910390a250565b6123da82826121ad565b15151561244f576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f31373a206163636f756e7420616c72656164792068617320726f6c650000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6124b782826121ad565b151561252b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f31383a206163636f756e7420646f6573206e6f74206861766520726f6c65000081525060200191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106125ca57805160ff19168380011785556125f8565b828001600101855582156125f8579182015b828111156125f75782518255916020019190600101906125dc565b5b5090506126059190612609565b5090565b61262b91905b8082111561262757600081600090555060010161260f565b5090565b905600a165627a7a72305820deabd77caf5312c7cb7d401b63b82da28dcfbfad605f5935c819da928d246b2e0029"
    };

    public static final String SM_BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {
        "[{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":3,\"value\":[0]},{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]},{\"kind\":4,\"value\":[7]},{\"kind\":4,\"value\":[9]}],\"constant\":false,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"destroy\",\"outputs\":[],\"payable\":false,\"selector\":[65000572,2329408832],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[6]}],\"constant\":false,\"inputs\":[{\"name\":\"totalAssets\",\"type\":\"uint256\"}],\"name\":\"updateTotalAssets\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"selector\":[525291932,1408931305],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":3,\"value\":[1]},{\"kind\":3,\"slot\":5,\"value\":[1]},{\"kind\":4,\"value\":[6]},{\"kind\":4,\"value\":[7]}],\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"info\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"issueAsset\",\"outputs\":[],\"payable\":false,\"selector\":[526590163,234475155],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addIssuer\",\"outputs\":[],\"payable\":false,\"selector\":[543772080,596820072],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeIssuer\",\"outputs\":[],\"payable\":false,\"selector\":[1203531923,2051880263],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":5,\"value\":[0]}],\"constant\":false,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"info\",\"type\":\"string\"}],\"name\":\"updateInfo\",\"outputs\":[],\"payable\":false,\"selector\":[1354760599,1430906278],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":3,\"slot\":3,\"value\":[0]}],\"constant\":true,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"selector\":[1666326814,1460761419],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[6]}],\"constant\":true,\"inputs\":[],\"name\":\"getTotalAssets\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"selector\":[1845964843,391521355],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[2]}],\"constant\":true,\"inputs\":[],\"name\":\"suspended\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"selector\":[1882127859,2039485372],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":3,\"slot\":5,\"value\":[0]}],\"constant\":true,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"infoOf\",\"outputs\":[{\"name\":\"info\",\"type\":\"string\"}],\"payable\":false,\"selector\":[2025033526,3509631437],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isIssuer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"selector\":[2273024615,45068934],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[7]}],\"constant\":true,\"inputs\":[],\"name\":\"getValidAssets\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"selector\":[2312654867,2935780746],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[9]}],\"constant\":true,\"inputs\":[],\"name\":\"blackHole\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"selector\":[2660301226,961777779],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[8]}],\"constant\":true,\"inputs\":[],\"name\":\"contractType\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"selector\":[3408852727,129655028],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":3,\"value\":[2]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendFrom\",\"outputs\":[],\"payable\":false,\"selector\":[3504854545,2159217471],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[],\"name\":\"unSuspend\",\"outputs\":[],\"payable\":false,\"selector\":[3623580105,1304026934],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[],\"name\":\"suspend\",\"outputs\":[],\"payable\":false,\"selector\":[3862956990,1796534436],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getHasAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"selector\":[4123727866,1311455571],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"admin\",\"type\":\"address\"},{\"name\":\"totalAssets\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"assetId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Send\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"assetId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Issue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Suspended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"UnSuspended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IssuerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IssuerRemoved\",\"type\":\"event\"}]"
    };

    public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_DESTROY = "destroy";

    public static final String FUNC_UPDATETOTALASSETS = "updateTotalAssets";

    public static final String FUNC_ISSUEASSET = "issueAsset";

    public static final String FUNC_ADDISSUER = "addIssuer";

    public static final String FUNC_REMOVEISSUER = "removeIssuer";

    public static final String FUNC_UPDATEINFO = "updateInfo";

    public static final String FUNC_OWNEROF = "ownerOf";

    public static final String FUNC_GETTOTALASSETS = "getTotalAssets";

    public static final String FUNC_SUSPENDED = "suspended";

    public static final String FUNC_INFOOF = "infoOf";

    public static final String FUNC_ISISSUER = "isIssuer";

    public static final String FUNC_GETVALIDASSETS = "getValidAssets";

    public static final String FUNC_BLACKHOLE = "blackHole";

    public static final String FUNC_CONTRACTTYPE = "contractType";

    public static final String FUNC_SENDFROM = "sendFrom";

    public static final String FUNC_UNSUSPEND = "unSuspend";

    public static final String FUNC_SUSPEND = "suspend";

    public static final String FUNC_GETHASAMOUNT = "getHasAmount";

    public static final Event SEND_EVENT =
            new Event(
                    "Send",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Address>(true) {},
                            new TypeReference<Address>(true) {},
                            new TypeReference<Address>(true) {},
                            new TypeReference<Uint256>() {},
                            new TypeReference<DynamicBytes>() {}));;

    public static final Event ISSUE_EVENT =
            new Event(
                    "Issue",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Address>(true) {},
                            new TypeReference<Uint256>() {},
                            new TypeReference<DynamicBytes>() {}));;

    public static final Event SUSPENDED_EVENT =
            new Event(
                    "Suspended", Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));;

    public static final Event UNSUSPENDED_EVENT =
            new Event(
                    "UnSuspended",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));;

    public static final Event ISSUERADDED_EVENT =
            new Event(
                    "IssuerAdded",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));;

    public static final Event ISSUERREMOVED_EVENT =
            new Event(
                    "IssuerRemoved",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));;

    protected OneToOne(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static String getABI() {
        return ABI;
    }

    public TransactionReceipt destroy(BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String destroy(BigInteger assetId, byte[] data, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDestroy(BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, byte[]> getDestroyInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Uint256>() {},
                                new TypeReference<DynamicBytes>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, byte[]>(
                (BigInteger) results.get(0).getValue(), (byte[]) results.get(1).getValue());
    }

    public TransactionReceipt updateTotalAssets(BigInteger totalAssets) {
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        totalAssets)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String updateTotalAssets(BigInteger totalAssets, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        totalAssets)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdateTotalAssets(BigInteger totalAssets) {
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        totalAssets)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getUpdateTotalAssetsInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public Tuple1<BigInteger> getUpdateTotalAssetsOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public TransactionReceipt issueAsset(String to, BigInteger assetId, String info, byte[] data) {
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String issueAsset(
            String to, BigInteger assetId, String info, byte[] data, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForIssueAsset(
            String to, BigInteger assetId, String info, byte[] data) {
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple4<String, BigInteger, String, byte[]> getIssueAssetInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Address>() {},
                                new TypeReference<Uint256>() {},
                                new TypeReference<Utf8String>() {},
                                new TypeReference<DynamicBytes>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, BigInteger, String, byte[]>(
                (String) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                (byte[]) results.get(3).getValue());
    }

    public TransactionReceipt addIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String addIssuer(String account, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<String> getAddIssuerInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>((String) results.get(0).getValue());
    }

    public TransactionReceipt removeIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String removeIssuer(String account, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRemoveIssuerInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>((String) results.get(0).getValue());
    }

    public TransactionReceipt updateInfo(BigInteger assetId, String info) {
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String updateInfo(BigInteger assetId, String info, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdateInfo(BigInteger assetId, String info) {
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, String> getUpdateInfoInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Uint256>() {},
                                new TypeReference<Utf8String>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, String>(
                (BigInteger) results.get(0).getValue(), (String) results.get(1).getValue());
    }

    public String ownerOf(BigInteger assetId) throws ContractException {
        final Function function =
                new Function(
                        FUNC_OWNEROF,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public BigInteger getTotalAssets() throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETTOTALASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public Boolean suspended() throws ContractException {
        final Function function =
                new Function(
                        FUNC_SUSPENDED,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public String infoOf(BigInteger assetId) throws ContractException {
        final Function function =
                new Function(
                        FUNC_INFOOF,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Boolean isIssuer(String account) throws ContractException {
        final Function function =
                new Function(
                        FUNC_ISISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public BigInteger getValidAssets() throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETVALIDASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public String blackHole() throws ContractException {
        final Function function =
                new Function(
                        FUNC_BLACKHOLE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public String contractType() throws ContractException {
        final Function function =
                new Function(
                        FUNC_CONTRACTTYPE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt sendFrom(String from, String to, BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(from),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String sendFrom(
            String from, String to, BigInteger assetId, byte[] data, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(from),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSendFrom(
            String from, String to, BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(from),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, byte[]> getSendFromInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Address>() {},
                                new TypeReference<Address>() {},
                                new TypeReference<Uint256>() {},
                                new TypeReference<DynamicBytes>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, byte[]>(
                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (BigInteger) results.get(2).getValue(),
                (byte[]) results.get(3).getValue());
    }

    public TransactionReceipt unSuspend() {
        final Function function =
                new Function(
                        FUNC_UNSUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String unSuspend(TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UNSUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUnSuspend() {
        final Function function =
                new Function(
                        FUNC_UNSUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public TransactionReceipt suspend() {
        final Function function =
                new Function(
                        FUNC_SUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String suspend(TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_SUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSuspend() {
        final Function function =
                new Function(
                        FUNC_SUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public BigInteger getHasAmount(String owner) throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETHASAMOUNT,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(owner)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public List<SendEventResponse> getSendEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(SEND_EVENT, transactionReceipt);
        ArrayList<SendEventResponse> responses = new ArrayList<SendEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            SendEventResponse typedResponse = new SendEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.from = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.to = (String) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.assetId =
                    (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.data = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<IssueEventResponse> getIssueEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ISSUE_EVENT, transactionReceipt);
        ArrayList<IssueEventResponse> responses =
                new ArrayList<IssueEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            IssueEventResponse typedResponse = new IssueEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.to = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.assetId =
                    (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.data = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<SuspendedEventResponse> getSuspendedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(SUSPENDED_EVENT, transactionReceipt);
        ArrayList<SuspendedEventResponse> responses =
                new ArrayList<SuspendedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            SuspendedEventResponse typedResponse = new SuspendedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<UnSuspendedEventResponse> getUnSuspendedEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(UNSUSPENDED_EVENT, transactionReceipt);
        ArrayList<UnSuspendedEventResponse> responses =
                new ArrayList<UnSuspendedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            UnSuspendedEventResponse typedResponse = new UnSuspendedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<IssuerAddedEventResponse> getIssuerAddedEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ISSUERADDED_EVENT, transactionReceipt);
        ArrayList<IssuerAddedEventResponse> responses =
                new ArrayList<IssuerAddedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            IssuerAddedEventResponse typedResponse = new IssuerAddedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<IssuerRemovedEventResponse> getIssuerRemovedEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ISSUERREMOVED_EVENT, transactionReceipt);
        ArrayList<IssuerRemovedEventResponse> responses =
                new ArrayList<IssuerRemovedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            IssuerRemovedEventResponse typedResponse = new IssuerRemovedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static OneToOne load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new OneToOne(contractAddress, client, credential);
    }

    public static OneToOne deploy(
            Client client, CryptoKeyPair credential, String admin, BigInteger totalAssets)
            throws ContractException {
        byte[] encodedConstructor =
                FunctionEncoder.encodeConstructor(
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(admin),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        totalAssets)));
        return deploy(
                OneToOne.class,
                client,
                credential,
                getBinary(client.getCryptoSuite()),
                getABI(),
                encodedConstructor,
                null);
    }

    public static class SendEventResponse {
        public TransactionReceipt.Logs log;

        public String operator;

        public String from;

        public String to;

        public BigInteger assetId;

        public byte[] data;
    }

    public static class IssueEventResponse {
        public TransactionReceipt.Logs log;

        public String to;

        public BigInteger assetId;

        public byte[] data;
    }

    public static class SuspendedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class UnSuspendedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class IssuerAddedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class IssuerRemovedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }
}
